package com.sisgesbyte.services.administracion;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.administracion.MantenimientoAtencionClienteDao;
import com.sisgesbyte.dao.beanDao.AtencionClienteRequest;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.data.entity.administracion.AtencionClienteEntity;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.comun.GenericResponseEntity;
import com.sisgesbyte.services.administracion.bean.AtencionClienteBean;
import com.sisgesbyte.services.administracion.bean.AtencionClienteListaResponse;
import com.sisgesbyte.services.commonBean.GenericGuardarResponse;
import com.sisgesbyte.services.commonBean.GenericResponse;

@Stateless
public class MantenimientoAtencionClienteImpl implements MantenimientoAtencionCliente {

	@EJB
	private MantenimientoAtencionClienteDao mantenimientoAtencionClienteDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public AtencionClienteListaResponse listaAtencionCliente( String codTransaccion, FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[listaAtencionCliente idTx=" + codTransaccion + "] - ";
		AtencionClienteListaResponse response = new AtencionClienteListaResponse();
		
		try{
			 response.setIdTransaccion(codTransaccion);
			 List<AtencionClienteEntity> resDao = null;
			try{
				resDao = mantenimientoAtencionClienteDao.listaAtencionCliente(cadenaFiltros);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar " +e);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.size() > 0){
				List<AtencionClienteBean> lista = new ArrayList<AtencionClienteBean>();
				for(AtencionClienteEntity row : resDao){
					AtencionClienteBean bean = new AtencionClienteBean();
						bean.setActive(row.getActive());
						bean.setApellido(validaciones.validarCamposString(row.getApellido()));
						bean.setArea(validaciones.validarCamposString(row.getArea()));
						bean.setAreaEmpresaId(row.getArea_empresa_id());
						bean.setAsunto(validaciones.validarCamposString(row.getAsunto()));
						bean.setCodigo(validaciones.validarCamposString(row.getCodigo()));
						bean.setEmail(validaciones.validarCamposString(row.getEmail()));
						bean.setEstado(validaciones.validarCamposString(row.getEstado()));
						bean.setEstadoId(row.getEstado_id());
						bean.setId(row.getId());
						bean.setMotivo(validaciones.validarCamposString(row.getMotivo()));
						bean.setNombre(validaciones.validarCamposString(row.getNombre()));
						bean.setTelefono(validaciones.validarCamposString(row.getTelefono()));
						bean.setTema(validaciones.validarCamposString(row.getTema()));
						bean.setTemaAtencionId(row.getTema_atencion_id());
						bean.setFechaRegistro(row.getFecha_registro());
						
					lista.add(bean);
				}
				response.setListaAtencionBean(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	@Override
	public GenericGuardarResponse nuevaAtencionCliente(String codTransaccion, AtencionClienteBean request) {
		String mensajeTransaccionMetodo = "[nuevaAtencionCliente idTx=" + codTransaccion + "] - ";
		GenericGuardarResponse response = new GenericGuardarResponse();
		try{
			GenericResponseEntity resDao = null; 
			AtencionClienteRequest  bean = new AtencionClienteRequest();
			bean.setActive(request.getActive());
			bean.setApellido(validaciones.validarCamposString(request.getApellido()));
			bean.setAreaEmpresaId(request.getAreaEmpresaId());
			bean.setAsunto(validaciones.validarCamposString(request.getAsunto()));
			bean.setEmail(validaciones.validarCamposString(request.getEmail()));
			bean.setEstadoId(request.getEstadoId());
			bean.setMotivo(validaciones.validarCamposString(request.getMotivo()));
			bean.setNombre(validaciones.validarCamposString(request.getNombre()));
			bean.setTelefono(validaciones.validarCamposString(request.getTelefono()));
			bean.setTemaAtencionId(request.getTemaAtencionId());
			
			try{
				resDao = mantenimientoAtencionClienteDao.guardarAtencionCliente(bean);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el AccesoHost en BD "+e );
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				response.setCodigoSaved(validaciones.validarCamposString(resDao.getCodigo()));
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		return response;
	}

	@Override
	public GenericResponse editarAtencionCliente(String codTransaccion, AtencionClienteBean request) {
		String mensajeTransaccionMetodo = "[editarAtencionCliente idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity resDao = null; 
			AtencionClienteRequest bean = new AtencionClienteRequest();
			bean.setId(request.getId());
			bean.setActive(request.getActive());
			bean.setApellido(validaciones.validarCamposString(request.getApellido()));
			bean.setAreaEmpresaId(request.getAreaEmpresaId());
			bean.setAsunto(validaciones.validarCamposString(request.getAsunto()));
			bean.setEmail(validaciones.validarCamposString(request.getEmail()));
			bean.setEstadoId(request.getEstadoId());
			bean.setMotivo(validaciones.validarCamposString(request.getMotivo()));
			bean.setNombre(validaciones.validarCamposString(request.getNombre()));
			bean.setTelefono(validaciones.validarCamposString(request.getTelefono()));
			bean.setTemaAtencionId(request.getTemaAtencionId());
			
			try{
				resDao = mantenimientoAtencionClienteDao.actualizarAtencionCliente(bean);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al editar  en BD "+e );
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteAtencionCliente(String codTransaccion, int codAtencionCliente) {
		String mensajeTransaccionMetodo = "[deleteAtencionCliente idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			
			GenericEntity resDao = mantenimientoAtencionClienteDao.eliminarAtencionCliente(codAtencionCliente);
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_ELIMINAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_ELIMINAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar  en BD " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
		}
		
		return response;
	}

}
